package edu.cebanc.spring.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import edu.cebanc.spring.bean.Usuario;
import edu.cebanc.spring.services.UsuariosService;

@Controller
@RequestMapping(value="/usuarios")
public class UsuariosSpringController {
	
	@Autowired
	private UsuariosService usuariosService;
	
	ArrayList<Usuario> usuarios = new ArrayList<Usuario>();
	Map<String, Usuario> userMap = new HashMap<String, Usuario>();
	
	@RequestMapping(method=RequestMethod.GET)
	public String getMainView(Model model){
		
		model.addAttribute("usuarios", usuarios);
		System.out.println(usuariosService.listUsuario().toString());
		return "usuariosMain";
	}
	
	@RequestMapping(value="newUsuario", method=RequestMethod.GET)
	public String getFormView(Model model){
		
		Usuario u = new Usuario();
		model.addAttribute("usuario", u);
		return "usuariosForm";
	}
	
	@RequestMapping(method=RequestMethod.POST)
	public String addUsuario(Usuario user, BindingResult result){
		
		if(result.hasErrors()){
			return "redirect:/usuarios/newUsuario";
		}
		if(userMap.containsKey(user.getUsername())){
			userMap.remove(user.getUsername());
			for(int i = 0; i < usuarios.size(); i++){
				if(usuarios.get(i).getUsername().equals(user.getUsername())){
					usuarios.remove(i);
				}
			}
		}
		
		this.usuarios.add(user);
		this.userMap.put(user.getUsername(), user);
		
		return "redirect:/usuarios/";
	}
	
	@RequestMapping(value="{name}", method=RequestMethod.GET)
	public String viewUsuario(@PathVariable String name, Model model){
		model.addAttribute("usuario", this.userMap.get(name));
		return "usuariosView";
	}
	
	@RequestMapping(value="editUsuario/{name}", method=RequestMethod.GET)
	public String editUsuario(@PathVariable String name, Model model){
		model.addAttribute("usuario", this.userMap.get(name));
		return "usuariosForm";
	}
	
	@RequestMapping(value="deleteUsuario/{name}")
	public String deleteUsuario(@PathVariable String name){
		
		userMap.remove(name);
		for(int i = 0; i < usuarios.size(); i++){
			if(usuarios.get(i).getUsername().equals(name)){
				usuarios.remove(i);
			}
		}
		
		return "redirect:/usuarios/";
	}

}
